1. Field of the Invention
The present invention relates generally to the automated testing of software and, more specifically, to a system and method that simplifies user interaction with software testing tools and corresponding software applications under test.
2. Description of Related Art Including Information Disclosed Under 37 CFR 1.97 and 1.98
In its infancy, software development was performed in small shops with relatively few developers. The resulting software applications tended to be small and relatively simple in operation, and were often designed to run on standalone computer systems. Because of the simple nature of the applications, their operation could be easily and efficiently tested by end users without special skills. The end users would exercise the application, discover a flaw (bug), and provide feedback to the developer who would then repair the software code. However, as both the computing hardware and software development industries evolved the systems and accompanying software applications have grown to such staggering complexity that this debugging method is no longer viable.
Modern business software applications typically require multiple networked servers with both dedicated and networked access terminals spread across wide areas. These servers are often accessed over the internet by virtually limitless numbers of computers with web browsers. Complex transactions between these disparate systems are handled routinely over such networks. Consequently, complex software applications must be developed to handle these transactions and to keep vital business applications from failing. These complex software applications require vast teams of developers, each working on smaller portions of the application which must then be combined such that they work seamlessly with each other portion. This growth in complexity has caused the debugging process to evolve as well.
Software application testing seeks to uncover two types of errors: objective and subjective. Objective errors are relatively straight forward in that the software either works or it does not. However, these errors (bugs) can be difficult to uncover given that complex applications have an essentially limitless number of input combinations. For example, there may be only two obscure combinations of an essentially limitless number of input combinations that cause a bug to appear. Subjective errors are those that cause an end user of the application to be unhappy with the user interface or the application's operation. Locating subjective errors requires substantial user feedback, which adds considerable time to the application testing process.
Complex business applications require extensive testing before use in valuable business transactions. Because of the complexity of the applications, end user testing is not a viable means. Capture/playback was introduced to alleviate this problem. Initially, hardware devices recorded the manual keystrokes of a user. These recordings were then played back as test cases in order to test the software. While test cases were simple to create, this method proved to be inadequate due to the limited scope of the tests and the difficulty required in maintaining and documenting the testing process.
Software was subsequently utilized in an effort to overcome the shortcomings of the hardware capture/playback process. Software systems recorded test cases as scripts. These scripts could then be modified to increase the number of test cases possible, giving a much broader range of test coverage. Yet, these systems required even greater specialized development skills to create and maintain. Each time the underlying application would change, completely new and often additional test scripts were required. A given change in a software application required an exponential increase in the amount of software test scripts due to the multitude of new potential input combinations that could be exercised. Thus, this method was still too highly technical in nature and difficult to maintain and document.
More recently, automated testing solutions have evolved that utilize a framework approach for managing applications under test. This framework approach added a layer of abstraction to the underlying test case scripts. By abstracting the underlying scripts, automated test sessions could be brought within the realm of non-technical personnel. Through abstraction, underlying scripts could be pre-built and assigned “keywords” reflecting the functions performed (for example, “log on”). Thus, by merely combining keywords a non-technical person could assemble a specialized test case without the need for specialized programming experience.
Although test frameworks provided a dramatic improvement in testing efficiency and productivity, significant shortcomings still remain. A complex test session often requires combining hundreds of individual keywords. This can be extremely time consuming, inefficient, and thus expensive. Also, the framework abstraction still consists of underlying files with keywords and associated data elements. Users still often end up creating specialized test scripts to manipulate these files. In addition, the underlying scripts are often incompatible with different operating systems or programming environments and thus need to be continually recreated. Finally, the keyword framework approach still requires non-technical personnel to think like programmers in assembling the various keywords for a test session, impeding the adoption of this automated testing method as well.
Current automated test applications attempt to satisfy these shortcomings but fall short. The offerings range from free Open Source software to costly high-end applications. The Open Source applications emphasize flexibility by maintaining an open architecture. Thus, substantial specialized programming experience is required which negates its no-cost attribute. The high-end applications emphasize ease of use by even further abstracting the underlying test scripts. However, these applications are limited in the overall platforms they support due to the excessive abstraction they provide. In addition, the application to be tested must exist in order to generate test cases, delaying when testing can begin and consequently delaying the release of the application under test. Offerings in the middle of this range tend to require specialized programming experience due to the lack of sufficient abstraction.
All automated test applications require specialized test tool software applications that are developed for particular operating system environments. There are many third-party test tool applications available to handle the wide array of potential operating systems. Because these test tools are highly specialized, the framework approach to automated testing seeks to abstract the underlying test tool to shield the operator from the underlying complexities. Current automated testing applications still require development of special scripts to incorporate a particular third-party test tool. Thus, specialized programming knowledge is still required, limiting the usefulness of the automated testing application for non-technical personnel.
While automated testing is great for uncovering objective errors, it is not for subjective errors. Locating subjective errors still requires feedback from an end user by manually testing the application. Thus, automatic testing is not the panacea. A combination of automatic and manual testing is required for any comprehensive software test plan. Considering the shortcomings of the aforementioned testing methods, a need exists for a testing solution that allows for both automated and manual testing, ease of use for non-technical personnel, expandability and adaptability for technical personnel, flexibility in test case creation, and wide coverage of platforms and third party testing tools.